import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int[] tmp = test();                             //返回值是数组
        System.out.println(Arrays.toString(tmp));
    }

    public static int[] test() {
        int[] ret = {1, 2, 3, 4};
        return ret;
    }





    public static void main7(String[] args) {        //不是传引用就一定会 修改实参的值，需要看 拿到引用后形参的操作
        int[] array = {12, 34, 55, 67};

        //func1(array);                             //调用此方法打印的是实参array，形参array已被修改指向
        func2(array);

        System.out.println(Arrays.toString(array));

    }

    public static void func1(int[] array) {
        array = new int[]{1, 2, 3, 4};              //此处修改了形参的指向
    }

    public static void func2(int[] array) {
        array[0] = 88;
    }





    public static void main6(String[] args) {
        int[] array = {12, 34, 55, 67};
        print(array);

        System.out.println("==============");

        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println();
    }

    public static void print(int[] array) {             //参数传的是地址，所以实参与形参的引用指向的是同一个对象
        array[0] = 88;
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println();
    }





    public static void main5(String[] args) {
        int[] array1 = {1, 2, 3, 4, 5};
        int[] array2 = {100, 200, 300, 400, 500};

        array1 = array2;                         //array1这个引用指向array2这个引用所指向的对象

        //int[] array1 = {1, 2, 3, 4, 5};        //当没有人引用这个对象的时候，JVM会自动回收该对象
    }





    public static void main4(String[] args) {    //array是一个引用变量
        int[] array = {12, 34, 55, 76};
        System.out.println(array);               //[I@4eec7777

        System.out.println(array[0]);            //array这个 引用 指向了哪个 对象

        int[] array2 = null;                     //代表array2这个引用不指向任何的对象
        System.out.println(array2);              //null
        System.out.println(array2.length);       //NullPointerException 空指针异常
    }





    public static void main3(String[] args) {            //数组的打印（数组的遍历）
        int[] array = {12, 34, 55, 76};

        for (int i = 0; i < array.length; i++) {        //for循环打印数组，依赖下标，需要知道长度
            System.out.print(array[i] + " ");
        }
        System.out.println();

        for (int x : array) {                           //foreach循环，只是简单地遍历，不依赖下标，不需要知道长度
            System.out.print(x + " ");
        }
        System.out.println();

        String ret = Arrays.toString(array);            //toString 把数组以字符串的形式输出
        System.out.println(ret);
        System.out.println(Arrays.toString(array));
    }





    public static void main2(String[] args) {            //数组的使用
        int[] array = {12, 34, 55, 76};
        System.out.println(array[2]);                   //访问下标来使用
        System.out.println(array[21]);                  //数组越界访问，程序会报错

        array[2] = 200;
        System.out.println(array[2]);

        System.out.println(array.length);               //获取数组（链表）的长度
    }





    public static void main1(String[] args) {            //数组的定义
        int[] array = {1, 2, 3, 4, 5};
        int[] array2 = new int[]{1, 2, 3, 4, 5};        //array与array2本质上是相同的，array是array2的简写
        int[] array3 = new int[10];                     //该数组申请了一块40个字节的空间，未初始化，数组里面的值默认是0

        int a = 10;
        int[] array4 = new int[a];                      //数组大小可用变量来表示

        int[] array5;
        array5 = new int[]{1, 2, 3, 4, 5};
//        int[] array6;
//        array6 = {1, 2, 3, 4, 5};                     //error

        boolean[] flag = new boolean[5];                //布尔类型数组未初始化默认值是false
    }
}
